package type.data;

import java.util.Stack;


/**
 * スタックのデータ構造(Stackのラッパー)
 *
 * @author function
 */
public class StackStruct<DataType>
{
	/** Stackのデータ構造を利用 */
	private Stack<DataType>			 m_stack;
	/**
	 * コンストラクタ
	 */
	public StackStruct()
	{
		m_stack = new Stack<DataType>();
	}

	/**
	 * データの追加
	 *
	 * @param data 追加するデータ
	 */
	public void push( DataType	data )
	{
		m_stack.push( data );
	}

	/**
	 * データを取り出す（削除されてしまいます）
	 *
	 * @return 最後にpushしたデータを返す
	 */
	public DataType pop()
	{
		// データが空ならnullを返す
		if( isEmpty() )
		{
			return null;
		}

		return m_stack.pop();
	}

	/**
	 * データを取り出す（削除はされない）
	 *
	 * @return 最後にpushしたデータを返す
	 */
	public DataType	get()
	{
		// データが空ならnullを返す
		if( isEmpty() )
		{
			return null;
		}

		return m_stack.peek();
	}

	/**
	 * データをクリアする
	 */
	public void clear()
	{
		m_stack.clear();
	}

	/**
	 * スタックが空かどうか
	 *
	 * @return 空ならtrue
	 */
	public boolean isEmpty()
	{
		return m_stack.isEmpty();
	}

	/**
	 * キューイングされたデータ数を取得
	 *
	 * @return キューイングされているデータ数
	 */
	public int size()
	{
		return m_stack.size();
	}

	/**
	 * キューイングされているデータを配列データにして返す
	 *
	 * @param storage データの格納先
	 * @return　キューイングされているデータが格納された配列
	 */
	public DataType[] toArray( DataType[] storage )
	{
		storage = m_stack.toArray( storage );

		return storage;
	}
}